#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <iostream>
#include <fstream>
#include <vector>
#include <sstream>

#define forn(i,n) for(i=0; i < (int)(n); ++i)

using namespace std;

string doubletostring(double value) {
  std::ostringstream o;
  if (!(o << value))
    return "";
  return o.str();
}

string dameChocloParametros(const vector< string > &params, const vector< float > &valores) {
	int i;
	string res = "";
	forn(i,params.size()) {
		float valor = valores[i];
		res += (params[i] + "=" +doubletostring(valor)+" ");
	}
	return res;
}

int main(int argc, char* argv[]) {
	/*Archivo para el grafico*/
	ofstream archGraf;
	
	/*Archivo resultado de la jugada*/
	ifstream archRes;
	
	/*Parametros para los graficos*/
	int punt_rojo;
	int punt_verde;
	float tiempo_rojo;
	float tiempo_verde;
	
	/*Nombres de los Parametros*/
	vector< string > params;
	params.push_back("-p_cip");
	params.push_back("-p_cie");
	params.push_back("-p_tip");
	params.push_back("-p_tie");
	params.push_back("-p_fep");
	params.push_back("-p_fee");
	params.push_back("-p_pro");
	
	/*Valores de los Parametros*/
	vector< float > valores = vector< float >(params.size(),0);
	valores[0] = 6.3; //-p_cip
	valores[1] = 9.4; //-p_cie
	valores[2] = 5.4; //-p_tip
	valores[3] = 6.5; //-p_tie
	valores[4] = 5.2; //-p_fep
	valores[5] = 0; //-p_fee
	valores[6] = 0; //-p_pro
	
	/*Jugadores*/
	string rojo = "./nuestros_jugadores/mike_exacto ";
	string verde = "./jugadores/heurb";
	
	/*Juego a probar*/
	int profundidad;
	int prof_desde = 1;
	int prof_hasta = 4;
	int tam_tablero;
	int tam_tab_desde = 4;
	int tam_tab_hasta = 13;
	
	int c;
	int cantPartidas = 1;
	
	string parametros;
	
	archGraf.open("salida_grafico1.txt", ofstream::out);
	
	for(profundidad=prof_desde; profundidad < prof_hasta; ++profundidad) {
		for (tam_tablero=tam_tab_desde; tam_tablero < tam_tab_hasta; ++tam_tablero) {
			forn(c,cantPartidas) {
				valores[6] = profundidad;
				parametros = "./judge " + doubletostring(tam_tablero) + " " + rojo + dameChocloParametros(params,valores) + " -- " + verde + " > result.txt";
				cout << "Parametros: " << parametros << endl;
				system(parametros.c_str());
				archRes.open("result.txt", ifstream::in);
				tiempo_rojo = 0;
				tiempo_verde = 0;
				archRes >> punt_rojo >> punt_verde >> tiempo_rojo >> tiempo_verde;
				//cout << "\tPartido -- " << "jug0: "<< punt_rojo<< "|\t jug1: "<< punt_verde << endl;
				archRes.close();
				
				//sleep(1);
				
				// Salida para los graficos.
				tiempo_rojo = 600 - tiempo_rojo;
				tiempo_verde = 600 - tiempo_verde;
				cout << profundidad << " " << tam_tablero << " " << punt_rojo << " " << punt_verde << " " << tiempo_rojo << " " << tiempo_verde << endl;
				archGraf << profundidad << " " << tam_tablero << " " << punt_rojo << " " << punt_verde << " " << tiempo_rojo << " " << tiempo_verde << endl;
			}
		}
	}
	
	archGraf.close();
	
	return 0;
}
